import Request from "@/utils/request.js"

/**
 * 通过config接口注入权限验证配置
 */
const config = ()=>{
    return new Promise((resolve,reject) =>{
        // 获取微信配置参数
        Request.post('/qy-wechat/jssdk/config-info',{
            url:encodeURIComponent(location.href),
            type:1
        },{unLoading:true})
        .then(res=>{
            console.log("config返回的配置信息：",res.data)
            if(res.data.code == 200){
                wx.config({
                    beta: true,// 必须这么写，否则wx.invoke调用形式的jsapi会有问题
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
                    appId:res.data.data.appId, // 必填，公众号的唯一标识
                    timestamp:res.data.data.timestamp , // 必填，生成签名的时间戳
                    nonceStr:res.data.data.nonceStr, // 必填，生成签名的随机串
                    signature:res.data.data.signature,// 必填，签名
                    jsApiList:[
                        "selectEnterpriseContact", //选人接口
                        "openUserProfile", //打开个人信息页接口,
                        'openEnterpriseChat' // 打开会话
                    ]// 必填，需要使用的JS接口列表
                });
                wx.error(function (res) {
                    alert("js-sdk config error:"+JSON.stringify(res))
                    console.log('注册失败',res)
                })
                resolve(res.data.data)
            }else{
                alert("wechat/config获取失败")
                resolve(false)
            }
        })
    })
}

const agentConfig = (jsApiList,noncestr,timestamp)=>{
    return new Promise((resolve,reject) =>{
        // 获取微信配置参数
        Request.post('/qy-wechat/jssdk/config-info',{
            url:encodeURIComponent(location.href),
            type:2,
            noncestr,
            timestamp
        },{unLoading:true})
        .then(res=>{
            console.log("agentConfig返回的配置信息：",res.data)
            if(res.data.code == 200){
                wx.agentConfig({
                    corpid: res.data.data.appId, // 必填，企业微信的corpid，必须与当前登录的企业一致
                    agentid: res.data.data.agentId, // 必填，企业微信的应用id （e.g. 1000247）
                    timestamp: res.data.data.timestamp, // 必填，生成签名的时间戳
                    nonceStr: res.data.data.nonceStr, // 必填，生成签名的随机串
                    signature: res.data.data.signature,// 必填，签名，见附录-JS-SDK使用权限签名算法
                    jsApiList,//:['selectExternalContact'], //必填，传入需要使用的接口名称
                    success: function(res) {
                        //alert('agentConfig is seccess!')
                        resolve(res.data.data)
                        // 回调
                    },
                    fail: function(res) {
                        alert("agentConfig error:"+JSON.stringify(res))
                        if(res.errMsg.indexOf('function not exist') > -1){
                            alert('版本过低请升级')
                        }
                    }
                });
                resolve(res.data.data)
            }else{
                alert("wechat/config获取失败")
                resolve(false)
            }
        })
    })
}

/**
 * 
 * @param {*} type 函数类型：updateAppMessageShareData，updateTimelineShareData
 * @param {*} title 标题
 * @param {*} desc 描述
 * @param {*} link  连接
 * @param {*} imgUrl 图像地址
 */
const shareSet = (type,title,desc,link,imgUrl)=>{
    return new Promise((resolve,reject) =>{
        wx[type]({  // 分享给朋友
            title: title, // 分享标题
            desc: desc || '', // 分享描述
            link: link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: imgUrl, // 分享图标
            success: () => {//分享成功
                console.log(`${type}-success`)
              resolve(true)
            }
        })
    })
}

/**
 * 选人接口
 */
export const selectEnterpriseContact = ()=>{
    wx.invoke("selectEnterpriseContact", {
            "fromDepartmentId": -1,// 必填，表示打开的通讯录从指定的部门开始展示，-1表示自己所在部门开始, 0表示从最上层开始
            "mode": "multi",// 必填，选择模式，single表示单选，multi表示多选
            "type": ["department", "user"],// 必填，选择限制类型，指定department、user中的一个或者多个
            "selectedDepartmentIds": ["2","3"],// 非必填，已选部门ID列表。用于多次选人时可重入，single模式下请勿填入多个id
            "selectedUserIds": ["lisi","lisi2"]// 非必填，已选用户ID列表。用于多次选人时可重入，single模式下请勿填入多个id
    },function(res){
            if (res.err_msg == "selectEnterpriseContact:ok")
            {
                    if(typeof res.result == 'string')
                    {
                            res.result = JSON.parse(res.result) //由于目前各个终端尚未完全兼容，需要开发者额外判断result类型以保证在各个终端的兼容性
                    }
                    
                    var selectedDepartmentList = res.result.departmentList;// 已选的部门列表
                    for (var i = 0; i < selectedDepartmentList.length; i++)
                    {
                            var department = selectedDepartmentList[i];
                            var departmentId = department.id;// 已选的单个部门ID
                            var departemntName = department.name;// 已选的单个部门名称
                    }
                    var selectedUserList = res.result.userList; // 已选的成员列表
                    for (var i = 0; i < selectedUserList.length; i++)
                    {
                            var user = selectedUserList[i];
                            var userId = user.id; // 已选的单个成员ID
                            var userName = user.name;// 已选的单个成员名称
                            var userAvatar= user.avatar;// 已选的单个成员头像
                    }
            }
    }
    );
}

/**
 * 打开会话
 * @param {*} userIds 成员id，多个以';'分格
 * @param {*} externalUserIds 外部联系人id，多个以';'分格
 * @param {*} groupName 会话名称
 * @param {*} chatId 
 */
export const openEnterpriseChat = (userIds,externalUserIds,groupName,chatId)=>{
    //alert(userIds)
    wx.openEnterpriseChat({
        // 注意：userIds和externalUserIds至少选填一个。内部群最多2000人；外部群最多500人；如果有微信联系人，最多40人
        userIds,    //参与会话的企业成员列表，格式为userid1;userid2;...，用分号隔开。
        externalUserIds, // 参与会话的外部联系人列表，格式为userId1;userId2;…，用分号隔开。
        groupName,  // 会话名称。单聊时该参数传入空字符串""即可。
        chatId, // 若要打开已有会话，需指定此参数。如果是新建会话，chatId必须为空串
        success: function(res) {
            alert("成功：",JSON.stringify(res))
            var chatId = res.chatId; //返回当前群聊ID，仅当使用agentConfig注入该接口权限时才返回chatId
            // 回调
        },
        fail: function(res) {
            alert("失败：",JSON.stringify(res))
            if(res.errMsg.indexOf('function not exist') > -1){
                alert('版本过低请升级')
            }
        }
    });
}

export default {
    config,
    agentConfig,
    shareSet
}